home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 November / PCWNOV07.iso / Software / Freeware / NSIS 2.29 / nsis-2.29-setup.exe / Examples / LogicLib.nsi < prev    next >
Encoding:
Text File  |  2005-08-06  |  11.8 KB  |  597 lines

  1. !verbose 2
  2.  
  3. Name "NSIS LogicLib Example"
  4. OutFile "LogicLib.exe"
  5. ShowInstDetails show
  6.  
  7. !include "LogicLib.nsh"
  8.  
  9. ;!undef LOGICLIB_VERBOSITY
  10. ;!define LOGICLIB_VERBOSITY 4   ; For debugging - watch what logiclib does with your code!
  11.  
  12. Page components "" "" ComponentsLeave
  13. Page instfiles
  14.  
  15. Section /o "Run tests" TESTS
  16.  
  17.   ; kinds of if other than "value1 comparison value2"
  18.   ClearErrors
  19.   FindFirst $R1 $R2 "$PROGRAMFILES\*"
  20.   ${Unless} ${Errors}
  21.     ${Do}
  22.       ${Select} $R2
  23.         ${Case2} "." ".."
  24.           ; Do nothing
  25.         ${CaseElse}
  26.           DetailPrint "Found $PROGRAMFILES\$R2"
  27.       ${EndSelect}
  28.       FindNext $R1 $R2
  29.     ${LoopUntil} ${Errors}
  30.     FindClose $R1
  31.   ${EndUnless}
  32.  
  33.   ${If} ${FileExists} "${__FILE__}"
  34.     DetailPrint 'Source file "${__FILE__}" still exists'
  35.   ${Else}
  36.     DetailPrint 'Source file "${__FILE__}" has gone'
  37.   ${EndIf}
  38.  
  39.   ; if..endif
  40.   StrCpy $R1 1
  41.   StrCpy $R2 ""
  42.   ${If} $R1 = 1
  43.     StrCpy $R2 $R2A
  44.   ${EndIf}
  45.   ${If} $R1 = 2
  46.     StrCpy $R2 $R2B
  47.   ${EndIf}
  48.   ${If} $R1 < 2
  49.     StrCpy $R2 $R2C
  50.   ${EndIf}
  51.   ${If} $R1 < -2
  52.     StrCpy $R2 $R2D
  53.   ${EndIf}
  54.   ${If} $R1 > 2
  55.     StrCpy $R2 $R2E
  56.   ${EndIf}
  57.   ${If} $R1 > -2
  58.     StrCpy $R2 $R2F
  59.   ${EndIf}
  60.   ${If} $R1 <> 1
  61.     StrCpy $R2 $R2G
  62.   ${EndIf}
  63.   ${If} $R1 <> 2
  64.     StrCpy $R2 $R2H
  65.   ${EndIf}
  66.   ${If} $R1 >= 2
  67.     StrCpy $R2 $R2I
  68.   ${EndIf}
  69.   ${If} $R1 >= -2
  70.     StrCpy $R2 $R2J
  71.   ${EndIf}
  72.   ${If} $R1 <= 2
  73.     StrCpy $R2 $R2K
  74.   ${EndIf}
  75.   ${If} $R1 <= -2
  76.     StrCpy $R2 $R2L
  77.   ${EndIf}
  78.   ${If} $R2 == "ACFHJK"
  79.     DetailPrint "PASSED If..EndIf test"
  80.   ${Else}
  81.     DetailPrint "FAILED If..EndIf test"
  82.   ${EndIf}
  83.  
  84.   ; if..elseif..else..endif
  85.   StrCpy $R1 A
  86.   StrCpy $R2 ""
  87.   ${If} $R1 == A
  88.     StrCpy $R2 $R2A
  89.   ${ElseIf} $R1 == B
  90.     StrCpy $R2 $R2B
  91.   ${ElseUnless} $R1 != C
  92.     StrCpy $R2 $R2C
  93.   ${Else}
  94.     StrCpy $R2 $R2D
  95.   ${EndIf}
  96.   ${If} $R1 == D
  97.     StrCpy $R2 $R2D
  98.   ${ElseIf} $R1 == A
  99.     StrCpy $R2 $R2A
  100.   ${ElseUnless} $R1 != B
  101.     StrCpy $R2 $R2B
  102.   ${Else}
  103.     StrCpy $R2 $R2C
  104.   ${EndIf}
  105.   ${If} $R1 == C
  106.     StrCpy $R2 $R2C
  107.   ${ElseIf} $R1 == D
  108.     StrCpy $R2 $R2D
  109.   ${ElseUnless} $R1 != A
  110.     StrCpy $R2 $R2A
  111.   ${Else}
  112.     StrCpy $R2 $R2B
  113.   ${EndIf}
  114.   ${If} $R1 == B
  115.     StrCpy $R2 $R2B
  116.   ${ElseIf} $R1 == C
  117.     StrCpy $R2 $R2C
  118.   ${ElseUnless} $R1 != D
  119.     StrCpy $R2 $R2D
  120.   ${Else}
  121.     StrCpy $R2 $R2A
  122.   ${EndIf}
  123.   ${If} $R2 == "$R1$R1$R1$R1"
  124.     DetailPrint "PASSED If..ElseIf..Else..EndIf test"
  125.   ${Else}
  126.     DetailPrint "FAILED If..ElseIf..Else..EndIf test"
  127.   ${EndIf}
  128.  
  129.   ; if..andif..orif..endif
  130.   StrCpy $R2 ""
  131.   ${If} 1 = 1
  132.   ${AndIf} 2 = 2
  133.     StrCpy $R2 $R2A
  134.   ${Else}
  135.     StrCpy $R2 $R2B
  136.   ${EndIf}
  137.   ${If} 1 = 1
  138.   ${AndIf} 2 = 3
  139.     StrCpy $R2 $R2B
  140.   ${Else}
  141.     StrCpy $R2 $R2A
  142.   ${EndIf}
  143.   ${If} 1 = 2
  144.   ${AndIf} 2 = 2
  145.     StrCpy $R2 $R2B
  146.   ${Else}
  147.     StrCpy $R2 $R2A
  148.   ${EndIf}
  149.   ${If} 1 = 2
  150.   ${AndIf} 2 = 3
  151.     StrCpy $R2 $R2B
  152.   ${Else}
  153.     StrCpy $R2 $R2A
  154.   ${EndIf}
  155.  
  156.   ${If} 1 = 1
  157.   ${OrIf} 2 = 2
  158.     StrCpy $R2 $R2A
  159.   ${Else}
  160.     StrCpy $R2 $R2B
  161.   ${EndIf}
  162.   ${If} 1 = 1
  163.   ${OrIf} 2 = 3
  164.     StrCpy $R2 $R2A
  165.   ${Else}
  166.     StrCpy $R2 $R2B
  167.   ${EndIf}
  168.   ${If} 1 = 2
  169.   ${OrIf} 2 = 2
  170.     StrCpy $R2 $R2A
  171.   ${Else}
  172.     StrCpy $R2 $R2B
  173.   ${EndIf}
  174.   ${If} 1 = 2
  175.   ${OrIf} 2 = 3
  176.     StrCpy $R2 $R2B
  177.   ${Else}
  178.     StrCpy $R2 $R2A
  179.   ${EndIf}
  180.  
  181.   ${If} 1 = 1
  182.   ${AndIf} 2 = 2
  183.   ${OrIf} 3 = 3
  184.     StrCpy $R2 $R2A
  185.   ${Else}
  186.     StrCpy $R2 $R2B
  187.   ${EndIf}
  188.   ${If} 1 = 1
  189.   ${AndIf} 2 = 3
  190.   ${OrIf} 3 = 3
  191.     StrCpy $R2 $R2A
  192.   ${Else}
  193.     StrCpy $R2 $R2B
  194.   ${EndIf}
  195.   ${If} 1 = 2
  196.   ${AndIf} 2 = 2
  197.   ${OrIf} 3 = 3
  198.     StrCpy $R2 $R2A
  199.   ${Else}
  200.     StrCpy $R2 $R2B
  201.   ${EndIf}
  202.   ${If} 1 = 2
  203.   ${AndIf} 2 = 3
  204.   ${OrIf} 3 = 3
  205.     StrCpy $R2 $R2A
  206.   ${Else}
  207.     StrCpy $R2 $R2B
  208.   ${EndIf}
  209.   ${If} 1 = 1
  210.   ${AndIf} 2 = 2
  211.   ${OrIf} 3 = 4
  212.     StrCpy $R2 $R2A
  213.   ${Else}
  214.     StrCpy $R2 $R2B
  215.   ${EndIf}
  216.   ${If} 1 = 1
  217.   ${AndIf} 2 = 3
  218.   ${OrIf} 3 = 4
  219.     StrCpy $R2 $R2B
  220.   ${Else}
  221.     StrCpy $R2 $R2A
  222.   ${EndIf}
  223.   ${If} 1 = 2
  224.   ${AndIf} 2 = 2
  225.   ${OrIf} 3 = 4
  226.     StrCpy $R2 $R2B
  227.   ${Else}
  228.     StrCpy $R2 $R2A
  229.   ${EndIf}
  230.   ${If} 1 = 2
  231.   ${AndIf} 2 = 3
  232.   ${OrIf} 3 = 4
  233.     StrCpy $R2 $R2B
  234.   ${Else}
  235.     StrCpy $R2 $R2A
  236.   ${EndIf}
  237.  
  238.   ${If} 1 = 1
  239.   ${OrIf} 2 = 2
  240.   ${AndIf} 3 = 3
  241.     StrCpy $R2 $R2A
  242.   ${Else}
  243.     StrCpy $R2 $R2B
  244.   ${EndIf}
  245.   ${If} 1 = 1
  246.   ${OrIf} 2 = 3
  247.   ${AndIf} 3 = 3
  248.     StrCpy $R2 $R2A
  249.   ${Else}
  250.     StrCpy $R2 $R2B
  251.   ${EndIf}
  252.   ${If} 1 = 2
  253.   ${OrIf} 2 = 2
  254.   ${AndIf} 3 = 3
  255.     StrCpy $R2 $R2A
  256.   ${Else}
  257.     StrCpy $R2 $R2B
  258.   ${EndIf}
  259.   ${If} 1 = 2
  260.   ${OrIf} 2 = 3
  261.   ${AndIf} 3 = 3
  262.     StrCpy $R2 $R2B
  263.   ${Else}
  264.     StrCpy $R2 $R2A
  265.   ${EndIf}
  266.   ${If} 1 = 1
  267.   ${OrIf} 2 = 2
  268.   ${AndIf} 3 = 4
  269.     StrCpy $R2 $R2B
  270.   ${Else}
  271.     StrCpy $R2 $R2A
  272.   ${EndIf}
  273.   ${If} 1 = 1
  274.   ${OrIf} 2 = 3
  275.   ${AndIf} 3 = 4
  276.     StrCpy $R2 $R2B
  277.   ${Else}
  278.     StrCpy $R2 $R2A
  279.   ${EndIf}
  280.   ${If} 1 = 2
  281.   ${OrIf} 2 = 2
  282.   ${AndIf} 3 = 4
  283.     StrCpy $R2 $R2B
  284.   ${Else}
  285.     StrCpy $R2 $R2A
  286.   ${EndIf}
  287.   ${If} 1 = 2
  288.   ${OrIf} 2 = 3
  289.   ${AndIf} 3 = 4
  290.     StrCpy $R2 $R2B
  291.   ${Else}
  292.     StrCpy $R2 $R2A
  293.   ${EndIf}
  294.  
  295.   ${If} $R2 == "AAAAAAAAAAAAAAAAAAAAAAAA"
  296.     DetailPrint "PASSED If..AndIf..OrIf..Else..EndIf test"
  297.   ${Else}
  298.     DetailPrint "FAILED If..AndIf..OrIf..Else..EndIf test"
  299.   ${EndIf}
  300.  
  301.   ; ifthen..|..|
  302.   StrCpy $R1 1
  303.   StrCpy $R2 ""
  304.   ${IfThen} $R1 = 1 ${|} StrCpy $R2 $R2A ${|}
  305.   ${IfThen} $R1 = 2 ${|} StrCpy $R2 $R2B ${|}
  306.   ${If} $R2 == "A"
  307.     DetailPrint "PASSED IfThen test"
  308.   ${Else}
  309.     DetailPrint "FAILED IfThen test"
  310.   ${EndIf}
  311.  
  312.   ; ifcmd..||..| and if/unless cmd
  313.   StrCpy $R2 ""
  314.   ${IfCmd} MessageBox MB_YESNO "Please click Yes" IDYES ${||} StrCpy $R2 $R2A ${|}
  315.   ${Unless} ${Cmd} `MessageBox MB_YESNO|MB_DEFBUTTON2 "Please click No" IDYES`
  316.     StrCpy $R2 $R2B
  317.   ${EndUnless}
  318.   ${If} $R2 == "AB"
  319.     DetailPrint "PASSED IfCmd/If Cmd test"
  320.   ${Else}
  321.     DetailPrint "FAILED IfCmd/If Cmd test"
  322.   ${EndIf}
  323.  
  324.   ; select..case..case2..case3..case4..case5..caseelse..endselect
  325.   StrCpy $R1 1
  326.   StrCpy $R2 ""
  327.   ${Select} $R1
  328.     ${Case} "1"
  329.       StrCpy $R2 $R2A
  330.     ${Case} "2"
  331.       StrCpy $R2 $R2B
  332.     ${Case2} "3" "4"
  333.       StrCpy $R2 $R2C
  334.     ${CaseElse}
  335.       StrCpy $R2 $R2D
  336.   ${EndSelect}
  337.   ${Select} $R1
  338.     ${Case} "2"
  339.       StrCpy $R2 $R2A
  340.     ${Case} "3"
  341.       StrCpy $R2 $R2B
  342.     ${Case2} "4" "5"
  343.       StrCpy $R2 $R2C
  344.     ${CaseElse}
  345.       StrCpy $R2 $R2D
  346.   ${EndSelect}
  347.   ${Select} $R1
  348.     ${Case} "3"
  349.       StrCpy $R2 $R2A
  350.     ${Case} "4"
  351.       StrCpy $R2 $R2B
  352.     ${Case2} "5" "1"
  353.       StrCpy $R2 $R2C
  354.     ${CaseElse}
  355.       StrCpy $R2 $R2D
  356.   ${EndSelect}
  357.   ${Select} $R1
  358.     ${Case} "4"
  359.       StrCpy $R2 $R2A
  360.     ${Case} "5"
  361.       StrCpy $R2 $R2B
  362.     ${Case2} "1" "2"
  363.       StrCpy $R2 $R2C
  364.     ${CaseElse}
  365.       StrCpy $R2 $R2D
  366.   ${EndSelect}
  367.   ${If} $R2 == "ADCC"
  368.     DetailPrint "PASSED Select..Case*..EndSelect test"
  369.   ${Else}
  370.     DetailPrint "FAILED Select..Case*..EndSelect test"
  371.   ${EndIf}
  372.  
  373.   ; switch..case..caseelse..endswitch
  374.   StrCpy $R2 ""
  375.   ${For} $R1 1 10
  376.     ${Switch} $R1
  377.       ${Case} 3
  378.         StrCpy $R2 $R2A
  379.       ${Case} 4
  380.         StrCpy $R2 $R2B
  381.         ${Break}
  382.       ${Case} 5
  383.         StrCpy $R2 $R2C
  384.     ${EndSwitch}
  385.     ${Switch} $R1
  386.       ${Case} 1
  387.         StrCpy $R2 $R2D
  388.       ${Default}
  389.         StrCpy $R2 $R2E
  390.         ${Break}
  391.       ${Case} 2
  392.         StrCpy $R2 $R2F
  393.     ${EndSwitch}
  394.     ${Switch} $R1
  395.       ${Case} 6
  396.       ${Case} 7
  397.         StrCpy $R2 $R2G
  398.         ${If} $R1 = 6
  399.       ${Case} 8
  400.           StrCpy $R2 $R2H
  401.           ${Switch} $R1
  402.             ${Case} 6
  403.               StrCpy $R2 $R2I
  404.               ${Break}
  405.             ${Case} 8
  406.               StrCpy $R2 $R2J
  407.           ${EndSwitch}
  408.         ${EndIf}
  409.         StrCpy $R2 $R2K
  410.         ${Break}
  411.       ${Default}
  412.         StrCpy $R2 $R2L
  413.       ${Case} 9
  414.         StrCpy $R2 $R2M
  415.     ${EndSwitch}
  416.   ${Next}
  417.   ${If} $R2 == "DELMFLMABELMBELMCELMEGHIKEGKEHJKEMELM"
  418.     DetailPrint "PASSED Switch..Case*..EndSwitch test"
  419.   ${Else}
  420.     DetailPrint "FAILED Switch..Case*..EndSwitch test"
  421.   ${EndIf}
  422.  
  423.   ; for[each]..exitfor..next
  424.   StrCpy $R2 ""
  425.   ${For} $R1 1 5
  426.     StrCpy $R2 $R2$R1
  427.   ${Next}
  428.   ${ForEach} $R1 10 1 - 1
  429.     StrCpy $R2 $R2$R1
  430.   ${Next}
  431.   ${For} $R1 1 0
  432.     StrCpy $R2 $R2$R1
  433.   ${Next}
  434.   ${If} $R2 == "1234510987654321"
  435.     DetailPrint "PASSED For[Each]..Next test"
  436.   ${Else}
  437.     DetailPrint "FAILED For[Each]..Next test"
  438.   ${EndIf}
  439.  
  440.   ; do..exitdo..loop
  441.   StrCpy $R1 0
  442.   StrCpy $R2 ""
  443.   ${Do}
  444.     StrCpy $R2 $R2$R1
  445.     IntOp $R1 $R1 + 1
  446.     ${If} $R1 > 10
  447.       ${ExitDo}
  448.     ${EndIf}
  449.   ${Loop}
  450.   ${If} $R2 == "012345678910"
  451.     DetailPrint "PASSED Do..ExitDo..Loop test"
  452.   ${Else}
  453.     DetailPrint "FAILED Do..ExitDo..Loop test"
  454.   ${EndIf}
  455.  
  456.   ; do..exitdo..loopuntil
  457.   StrCpy $R1 0
  458.   StrCpy $R2 ""
  459.   ${Do}
  460.     StrCpy $R2 $R2$R1
  461.     IntOp $R1 $R1 + 1
  462.   ${LoopUntil} $R1 >= 5
  463.   ${If} $R2 == "01234"
  464.     DetailPrint "PASSED Do..ExitDo..LoopUntil test"
  465.   ${Else}
  466.     DetailPrint "FAILED Do..ExitDo..LoopUntil test"
  467.   ${EndIf}
  468.  
  469.   ; dountil..exitdo..loop
  470.   StrCpy $R1 0
  471.   StrCpy $R2 ""
  472.   ${DoUntil} $R1 >= 5
  473.     StrCpy $R2 $R2$R1
  474.     IntOp $R1 $R1 + 1
  475.   ${Loop}
  476.   ${If} $R2 == "01234"
  477.     DetailPrint "PASSED DoUntil..ExitDo..Loop test"
  478.   ${Else}
  479.     DetailPrint "FAILED DoUntil..ExitDo..Loop test"
  480.   ${EndIf}
  481.  
  482.   ; nested do test
  483.   StrCpy $R1 0
  484.   StrCpy $R2 0
  485.   StrCpy $R3 ""
  486.   ${Do}
  487.     StrCpy $R3 $R3$R1$R2
  488.     IntOp $R1 $R1 + 1
  489.     ${If} $R1 > 5
  490.       ${ExitDo}
  491.     ${EndIf}
  492.     StrCpy $R2 0
  493.     ${Do}
  494.       StrCpy $R3 $R3$R1$R2
  495.       IntOp $R2 $R2 + 1
  496.       ${If} $R2 >= 5
  497.         ${ExitDo}
  498.       ${EndIf}
  499.     ${Loop}
  500.   ${Loop}
  501.   ${If} $R3 == "00101112131415202122232425303132333435404142434445505152535455"
  502.     DetailPrint "PASSED nested Do test"
  503.   ${Else}
  504.     DetailPrint "FAILED nested Do test"
  505.   ${EndIf}
  506.  
  507.   ; while..exitwhile..endwhile (exact replica of dowhile..enddo}
  508.   StrCpy $R1 0
  509.   StrCpy $R2 ""
  510.   ${While} $R1 < 5
  511.     StrCpy $R2 $R2$R1
  512.     IntOp $R1 $R1 + 1
  513.   ${EndWhile}
  514.   ${If} $R2 == "01234"
  515.     DetailPrint "PASSED While..ExitWhile..EndWhile test"
  516.   ${Else}
  517.     DetailPrint "FAILED While..ExitWhile..EndWhile test"
  518.   ${EndIf}
  519.  
  520.   ; Unsigned integer tests
  521.   StrCpy $R2 ""
  522.   ${If} -1 < 1
  523.     StrCpy $R2 $R2A
  524.   ${EndIf}
  525.   ${If} -1 U< 1
  526.     StrCpy $R2 $R2B
  527.   ${EndIf}
  528.   ${If} 0xFFFFFFFF > 1
  529.     StrCpy $R2 $R2C
  530.   ${EndIf}
  531.   ${If} 0xFFFFFFFF U> 1
  532.     StrCpy $R2 $R2D
  533.   ${EndIf}
  534.   ${If} $R2 == "AD"
  535.     DetailPrint "PASSED unsigned integer test"
  536.   ${Else}
  537.     DetailPrint "FAILED unsigned integer test"
  538.   ${EndIf}
  539.  
  540.   ; 64-bit integer tests (uses System.dll)
  541.   StrCpy $R2 ""
  542.   ${If} 0x100000000 L= 4294967296
  543.     StrCpy $R2 $R2A
  544.   ${EndIf}
  545.   ${If} 0x100000000 L< 0x200000000
  546.     StrCpy $R2 $R2B
  547.   ${EndIf}
  548.   ${If} 0x500000000 L>= 0x500000000
  549.     StrCpy $R2 $R2C
  550.   ${EndIf}
  551.   ${If} $R2 == "ABC"
  552.     DetailPrint "PASSED 64-bit integer test"
  553.   ${Else}
  554.     DetailPrint "FAILED 64-bit integer test"
  555.   ${EndIf}
  556.  
  557.   ; Extra string tests (uses System.dll)
  558.   StrCpy $R2 ""
  559.   ${If} "A" S< "B"
  560.     StrCpy $R2 $R2A
  561.   ${EndIf}
  562.   ${If} "b" S> "A"
  563.     StrCpy $R2 $R2B
  564.   ${EndIf}
  565.   ${If} "a" S<= "B"
  566.     StrCpy $R2 $R2C
  567.   ${EndIf}
  568.   ${If} "B" S< "B"
  569.     StrCpy $R2 $R2D
  570.   ${EndIf}
  571.   ${If} "A" S== "A"
  572.     StrCpy $R2 $R2E
  573.   ${EndIf}
  574.   ${If} "A" S== "a"
  575.     StrCpy $R2 $R2F
  576.   ${EndIf}
  577.   ${If} "A" S!= "a"
  578.     StrCpy $R2 $R2G
  579.   ${EndIf}
  580.   ${If} $R2 == "ABCEG"
  581.     DetailPrint "PASSED extra string test"
  582.   ${Else}
  583.     DetailPrint "FAILED extra string test"
  584.   ${EndIf}
  585.  
  586. SectionEnd
  587.  
  588. Function ComponentsLeave
  589.   ; Section flags tests (requires sections.nsh be included)
  590.   ${Unless} ${SectionIsSelected} ${TESTS}
  591.     MessageBox MB_OK "Please select the component"
  592.     Abort
  593.   ${EndIf}
  594. FunctionEnd
  595.  
  596. !verbose 3
  597.